/// Title:树节点实体 <br/>
/// Description:
///  需要实现树结构,继承此类,实现抽象方法 <br/>
/// 1.如果接口返回数据结构是树结构,重写get_children方法,提供子集 <br/>
/// 2.如果父子同级在一个数组,需要用TreeHelper处理成一致的树结构 <br/>
/// author:xiemiao <br/>
/// date: 2020-04-16  <br/>
/// version 1.0 <br/>
abstract class TreeNode {
  ///选择状态数组
  ///索引 [0:未选 1:已选 2:半选]
  static const List<String> CHECK_STATUS_ARR = ["unchecked", "checked", "halfchecked"];

  ///当前层级,默认-1
  int level = -1;

  ///父节点
  TreeNode parentTreeNode;

  ///是否展开
  bool isExpand = false;

  ///选择状态,见CHECK_STATUS_ARR
  String checkStatus = CHECK_STATUS_ARR[0];

  ///孩子
  List<TreeNode> _children = List();

  ///获取当前节点id
  String get_id();

  ///父节点id
  String get_parentId();

  ///显示的label
  String get_label();

  ///是否能选择
  bool isCanCheck();

  ///获取孩子,如果接口返回数据结构是树结构,重写get_children方法,提供子集
  List<TreeNode> get_children() {
    return this._children;
  }

  ///是否是叶子节点
  bool isLeaf() {
    return get_children().isEmpty;
  }

  ///获取附加数据
  Object getExtra() {}
}
